package de.tesis.dynaware.javafx.fancychart.data;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import de.tesis.dynaware.javafx.fancychart.data.formats.CsvDao;
import de.tesis.dynaware.javafx.fancychart.data.formats.Hdf5Dao;
import de.tesis.dynaware.javafx.fancychart.data.formats.XlsDao;
public class DataItemDao {
public static List<DataItem> importFromFile(String filePath, FileFormat fileFormat) {
if (filePath != null) {
switch (fileFormat) {
case CSV:
SortedMap<Number, Number> csvData = CsvDao.importCsv(filePath);
return createDataItems(csvData);
case XLS:
SortedMap<Number, Number> xlsData = XlsDao.importXls(filePath);
return createDataItems(xlsData);
case HDF5:
SortedMap<Number, Number> hdf5Data = Hdf5Dao.importHdf5(filePath);
return createDataItems(hdf5Data);
default:
break;
}
}
return FXCollections.observableArrayList();
}
public static void exportToFile(List<DataItem> dataItems, String filePath, FileFormat fileFormat) {
SortedMap<Number, Number> data = createEntries(dataItems);
if (filePath != null) {
switch (fileFormat) {
case CSV:
CsvDao.exportCsv(data, filePath);
break;
case XLS:
XlsDao.exportXls(data, filePath);
break;
case HDF5:
Hdf5Dao.exportHdf5(data, filePath);
break;
default:
break;
}
}
}
private static SortedMap<Number, Number> createEntries(List<DataItem> dataItems) {
SortedMap<Number, Number> data = new TreeMap<>();
for (DataItem item : dataItems) {
data.put(item.getX(), item.getY());
}
return data;
}
private static List<DataItem> createDataItems(SortedMap<Number, Number> data) {
ObservableList<DataItem> items = FXCollections.observableArrayList();
for (Number x : data.keySet()) {
Number y = data.get(x);
DataItem item = new DataItem(x, y);
items.add(item);
}
return items;
}
public enum FileFormat {
CSV("csv"), XLS("xls"), HDF5("h5");
private final String extension;
FileFormat(String extension) {
this.extension = extension;
}
public String getFileExtension() {
return extension;
}
}
}